#ifndef THREAD_H
#define THREAD_H

#include "BlobAnalysis.h"
#include "safequeue.h"
#include "abstractthread.h"

// 处理结果结构体
struct ProcessResult
{
    QPixmap processedImage;             // 已绘制轮廓的图像
    vector<pair<int, int>> periAndArea; // 周长/面积
    int currentIndex;                   // 当前图片索引
};

// 处理线程
class ProcessThread : public AbstractThread
{
    Q_OBJECT
public:
    ProcessThread(SafeQueue* queue, QObject *parent = nullptr);
    ~ProcessThread();

protected:
    void run() override;

signals:
    // 图片和区域处理完成信号，通过ThreadManager给主线程用于显示，和给计数线程用于统计个数
    void processedAndRegions(const ProcessResult& result, const vector<XVL::XVRegion>& regions, int width);

private:
    // QImage转XVImage
    XVL::XVImage* imageToXVImage(QImage& image);
    // 计算图片每个区域的轮廓、周长和面积
    bool processImageData(XVL::XVImage* inputImage, vector<XVL::XVPath>& contours,
                          vector<pair<int, int>>& periAndArea, vector<XVL::XVRegion>& filteredRegions);
    // 在图像上绘制轮廓
    QPixmap drawContoursOnImage(const QImage& image, const vector<XVL::XVPath>& contours);
};

#endif // THREAD_H
